home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / tbbs / prgsourc.zip / MSGMGR.ZIP / MSG_SHOW.PRG < prev    next >
Text File  |  1996-03-07  |  16KB  |  580 lines

  1. * e = end of message array 
  2. * m
  3. * z
  4. * l = line read
  5. * f
  6. * i
  7. * g = Goto number
  8. * ms = message number
  9. * ok = Acc return
  10. SET TYPEAHEAD TO 5
  11. SET ESCAPE OFF
  12. SET FORMAT TO fscr NOCLEAR
  13. SET INTENSITY OFF
  14.  
  15. FOPEN m msg.cfg 10 512
  16. FLREAD m f l
  17. FCLOSE m
  18.  
  19. l = CRTrim(RTrim(l))
  20. f = SubStr(l,8,1) + ":\flags\flags.dbf"
  21. i = SubStr(l,8,1) + ":\flags\user.ndx"
  22.  
  23. IF File(f) .AND. File(i)
  24.    USE (f) INDEX (i)
  25.    SEEK UName()
  26.    IF .NOT. Found()
  27.       f = Replicate(".",96)
  28.    ELSE
  29.       f = flg
  30.    ENDIF
  31.    CLOSE DATABASES
  32. ELSE
  33.   f = Replicate(".",96)
  34. ENDIF
  35.  
  36. ok = .T.
  37. g = 0
  38.  
  39. USE msgs INDEX numb,mess
  40. COUNT TO e
  41. GOTO TOP
  42.  
  43. DECLARE msg[e]
  44.  
  45. ms = 1
  46. DO WHILE ms < e       
  47.    msg[ms] = title
  48.    ms = ms + 1
  49.    SKIP
  50. ENDDO
  51. msg[ms] = title
  52. SET ORDER TO 2
  53.  
  54. IF SubStr(l,1,5) = Chr(240)+Chr(165)+Chr(129)+Chr(156)+Chr(146)
  55.    t = .T.
  56. ELSE
  57.    t = .F.
  58. ENDIF
  59.  
  60. DO Scr
  61.  
  62. tPag = Ceiling(e/17)                   && Total pages
  63. ms = 1                                   && Current Message
  64. pag = 1                                  && Current page
  65. r = 3                                  && Current r
  66.  
  67.  
  68. DO Lst WITH 0 
  69.  
  70. SET COLOR TO GR+/R
  71. @ r,8 SAY msg[ms]
  72.  
  73. SET COLOR TO N/N
  74. k = " "
  75. @ 2,0 GET k
  76. DO WHILE .T.
  77.    READ                                          
  78.    DO CASE
  79.       CASE LastKey() = 3                         && <Page Down>
  80.            IF ms = e
  81.               LOOP
  82.            ENDIF
  83.            IF pag = tPag
  84.               SET COLOR TO W+/N
  85.               @ r,8 SAY msg[ms]
  86.               r = r + (e - ms)
  87.               ms = e
  88.               SET COLOR TO GR+/R
  89.               @ r,8 SAY msg[ms]
  90.               LOOP
  91.            ELSE
  92.               IF (ms + 17) > e
  93.                  r = r - ((ms + 17) - e)
  94.                  ms = e
  95.               ELSE   
  96.                  ms = ms + 17
  97.               ENDIF
  98.               pag = pag + 1
  99.            ENDIF
  100.  
  101.       CASE LastKey() = 5                         && Up Arrow
  102.            IF ms = 1
  103.               LOOP
  104.            ENDIF
  105.            IF r = 3                           
  106.               ms = ms - 1
  107.               pag = pag - 1
  108.               r = 19
  109.            ELSE
  110.               SET COLOR TO W+/N
  111.               @ r,8 SAY msg[ms]
  112.               r = r - 1
  113.               ms = ms - 1
  114.               SET COLOR TO GR+/R
  115.               @ r,8 SAY msg[ms]
  116.               LOOP
  117.            ENDIF
  118.            
  119.       CASE LastKey() = 18                        && <Page Up>
  120.            IF ms = 1
  121.               LOOP
  122.            ENDIF
  123.            IF pag = 1
  124.               SET COLOR TO W+/N
  125.               @ r,8 SAY msg[ms]
  126.               r = r - (ms - 1)
  127.               ms = 1
  128.               SET COLOR TO GR+/R
  129.               @ r,8 SAY msg[ms]
  130.               LOOP
  131.            ELSE
  132.               ms = ms - 17
  133.               pag = pag - 1
  134.            ENDIF
  135.       
  136.       CASE LastKey() = 24                        && Down Arrow
  137.            IF ms = e
  138.               LOOP
  139.            ENDIF
  140.            IF r = 19
  141.               ms = ms + 1
  142.               pag = pag + 1
  143.               r = 3                   
  144.            ELSE
  145.               SET COLOR TO W+/N
  146.               @ r,8 SAY msg[ms]
  147.               r = r + 1
  148.               ms = ms + 1
  149.               SET COLOR TO GR+/R
  150.               @ r,8 SAY msg[ms]
  151.               LOOP
  152.            ENDIF
  153.       
  154.       CASE LastKey() = 27                   && <Esc>
  155.            QUIT                                
  156.       
  157.       CASE LastKey() = 13                          && <Enter>
  158.            DO Acc
  159.            IF .NOT. ok
  160.               ok = .T.
  161.               LOOP
  162.            ENDIF
  163.            DO CASE
  164.               CASE btype = "F"             && Combined Read of Bi-Level Brds
  165.                    p = RTrim(board) + RTrim(path) + " /F"
  166.               CASE btype = "S"             && Read Standard Brd
  167.                    p = RTrim(board)
  168.               CASE btype = "I"             && Isolated Read of Topic Brds
  169.                    p = RTrim(board) + RTrim(path) + " /S"
  170.               CASE btype = "C"             && Combined Read of Standard Brds
  171.                    p = "X"
  172.                    DOTBBS TYPE 6 OPTDATA " "
  173.               CASE btype = "O"             && Ordered Combined Read
  174.                    p = "/O"
  175.               CASE btype = "X"             && Waiting Messages
  176.                    p = "X"
  177.                    DOTBBS TYPE 15 OPTDATA " "
  178.            ENDCASE 
  179.            IF p # "X"
  180.               DOTBBS TYPE 6 OPTDATA p
  181.            ENDIF
  182.            USE msgs INDEX mess
  183.            DO Scr
  184.            
  185.       CASE LastKey() = 63                       && Help
  186.            h = HomePath() + "MSG.HLP"
  187.            DOTBBS TYPE 1 OPTDATA h
  188.            USE msgs INDEX mess
  189.            DO Scr
  190.  
  191.       CASE LastKey() = 68 .OR. LastKey() = 100      && Delete
  192.            IF SubStr(l,9,1) # "D" 
  193.               LOOP
  194.            ENDIF
  195.            DO Acc
  196.            IF .NOT. ok
  197.               ok = .T.
  198.               LOOP
  199.            ENDIF
  200.            DO CASE
  201.               CASE btype = "F"               && Comb. Delete of Bi-Level Brds
  202.                    p = RTrim(board) + RTrim(path) + " /F"
  203.               CASE btype = "X"                 && Waiting Msgs.
  204.                    SET COLOR TO B/B
  205.                    @ 7,29 CLEAR TO 12,50
  206.                    SET COLOR TO W+/B
  207.                    @ 8,31 SAY "Cannot Delete." 
  208.                    @ 9,31 SAY "Not your messages."
  209.                    @ 11,34 SAY   "<ANY KEY>"
  210.                    k = InKey(20)
  211.                    p = "X"
  212.               CASE btype = "S"             && Delete from Standard Brd
  213.                    p = RTrim(board)
  214.               CASE btype = "I"                && Delete from Topic Board
  215.                    p = RTrim(board) + RTrim(path) + " /S"
  216.               CASE btype = "C"             && Comb. Delete of Standard Brds
  217.                    p = "X"
  218.                    DOTBBS TYPE 9 OPTDATA " "
  219.                    USE msgs INDEX mess
  220.               CASE btype = "O"             && Ordered Comb. Delete
  221.                    p = "/O"
  222.            ENDCASE 
  223.            IF p # "X"
  224.               DOTBBS TYPE 9 OPTDATA p
  225.               USE msgs INDEX mess
  226.            ENDIF
  227.            DO Scr
  228.            
  229.       CASE LastKey() = 70 .OR. LastKey() = 102      && Find
  230.            DO BFind WITH g
  231.            IF g # 0 .AND. g <= e
  232.               pag = Ceiling(g/17)
  233.               ms = g
  234.               r = ms - ((pag*17)-17) + 2
  235.            ENDIF
  236.            DO Scr
  237.            
  238.       CASE LastKey() = 71 .OR. LastKey() = 103      && Goto
  239.            SET COLOR TO W+/B
  240.            g = 0
  241.            @ 8,29 CLEAR TO 10,49
  242.            @ 9,31 SAY "Msg. Board# "
  243.            @ 9,43 GET g PICTURE "@BZ 999"
  244.            READ
  245.            DO CASE
  246.               CASE g = 0
  247.                    @ 9,31 SAY "Cancelling Go To"
  248.                    k = Inkey(1)
  249.               CASE g # 0 .AND. g <= e
  250.                    pag = Ceiling(g/17)
  251.                    ms = g
  252.                    r = ms - ((pag*17)-17) + 2
  253.               CASE g > e
  254.                    @ 9,31 SAY "Last board# is " + LTrim(Str(e))
  255.                    k = Inkey(1)
  256.            ENDCASE
  257.            
  258.       CASE LastKey() = 74 .OR. LastKey() = 106      && Join
  259.            SET COLOR TO W+/N
  260.            @ 0,0 CLEAR
  261.            IF SubStr(l,11) = "S"
  262.               DOTBBS TYPE 24 OPTDATA " "
  263.            ELSE 
  264.               DOTBBS TYPE 24 OPTDATA SubStr(l,11)
  265.            ENDIF
  266.            USE msgs INDEX mess
  267.            DO Scr
  268.  
  269.       CASE LastKey() = 82 .OR. LastKey() = 114      && Reset Messages
  270.            DO Acc
  271.            IF .NOT. ok
  272.               ok = .T.
  273.               LOOP
  274.            ENDIF
  275.            DO CASE
  276.               CASE btype = "F"             && Comb. Bi-Level Brds
  277.                    p = RTrim(board) + RTrim(path) + " /F"
  278.               CASE btype = "X"    
  279.                    SET COLOR TO B/B
  280.                    @ 7,24 CLEAR TO 11,54
  281.                    SET COLOR TO W+/B
  282.                    @ 8,26 SAY "Cannot Reset on this Board."
  283.                    @ 10,33 SAY       "<ANY KEY>"
  284.                    k = InKey(20)
  285.                    p = "X"
  286.               CASE btype = "S"             && Standard Brd
  287.                    p = RTrim(board)
  288.               CASE btype = "I"             && Topic Board
  289.                    p = RTrim(board) + RTrim(path) + " /S"
  290.               CASE btype = "C" .OR. btype = "O"      && Comb. Standard
  291.                    p = "X"
  292.                    DOTBBS TYPE 16 OPTDATA " "
  293.                    USE msgs INDEX mess
  294.            ENDCASE 
  295.            IF p # "X"
  296.               DOTBBS TYPE 16 OPTDATA p
  297.               USE msgs INDEX mess
  298.            ENDIF
  299.            DO Scr
  300.       
  301.       CASE LastKey() = 83 .OR. LastKey() = 115      && Scan
  302.            DO Acc
  303.            IF .NOT. ok
  304.               ok = .T.
  305.               LOOP
  306.            ENDIF
  307.            DO CASE
  308.               CASE btype = "F"             && Comb. Scan of Bi-Level Brds
  309.                    p = RTrim(board) + RTrim(path) + " /F"
  310.               CASE btype = "S"             && Scan Standard Brd
  311.                    p = RTrim(board)
  312.               CASE btype = "I"             && Isolated Scan of Topic Brds
  313.                    p = RTrim(board) + RTrim(path) + " /S"
  314.               CASE btype = "C"             && Comb. Scan of Standard Brds
  315.                    p = "X"
  316.                    DOTBBS TYPE 6 OPTDATA " "
  317.               CASE btype = "O"             && Ordered Combined Scan
  318.                    p = "/O"
  319.               CASE btype = "X"             && Waiting Messages
  320.                    p = "X"
  321.                    DOTBBS TYPE 15 OPTDATA " "
  322.            ENDCASE 
  323.            IF p # "X"
  324.               DOTBBS TYPE 8 OPTDATA p
  325.            ENDIF
  326.            USE msgs INDEX mess
  327.            DO Scr
  328.            
  329.       CASE LastKey() = 87 .OR. LastKey() = 119      && Write
  330.            DO Acc
  331.            IF .NOT. ok
  332.               ok = .T.
  333.               LOOP
  334.            ENDIF
  335.            DO CASE
  336.               CASE btype = "F" .OR. btype = "X"    
  337.                    SET COLOR TO B/B
  338.                    @ 7,24 CLEAR TO 11,54
  339.                    SET COLOR TO W+/B
  340.                    @ 8,26 SAY "Cannot Write to this Board."
  341.                    @ 10,33 SAY       "<ANY KEY>"
  342.                    k = InKey(20)
  343.                    p = "X"
  344.               CASE btype = "S"             && Write to Standard Brd
  345.                    p = RTrim(board)
  346.               CASE btype = "I"             && Write to Topic Board
  347.                    p = RTrim(board) + RTrim(path) + " /S" 
  348.               CASE btype = "C" .OR. btype = "O"      && Combined Write
  349.                    p = "X"
  350.                    DOTBBS TYPE 7 OPTDATA " "
  351.                    USE msgs INDEX mess
  352.            ENDCASE 
  353.            IF p # "X"
  354.               DOTBBS TYPE 7 OPTDATA (p)
  355.               USE msgs INDEX mess
  356.            ENDIF
  357.            DO Scr
  358.       OTHERWISE
  359.            LOOP
  360.    ENDCASE
  361.    DO Lst WITH 0
  362.    SET COLOR TO GR+/R
  363.    @ r,8 SAY msg[ms]
  364. ENDDO
  365. QUIT
  366.  
  367. **************************************************
  368. PROCEDURE Scr
  369.  
  370. SET COLOR TO N/N
  371. @ 0,0 CLEAR
  372. SET COLOR TO B/B
  373. @ 0,0 CLEAR TO 1,79
  374. @ 21,0 CLEAR TO 23,79
  375. SET COLOR TO B+/B
  376. IF t
  377.    @ 0,55 SAY "Message Manager r1.0" 
  378. ELSE
  379.    @ 0,47 SAY "Message Manager s1.0  60-Day" 
  380.    @ 1,47 SAY "(c) 1996 LocalNet     SHAREWARE" 
  381. ENDIF
  382. SET COLOR TO GR+/B
  383. @ 0,3 SAY "Message Boards/Conferences"
  384. @ 21,2 SAY "<Enter>"
  385. @ 22,8 SAY "W"
  386. IF SubStr(l,9,1) = "D" 
  387.    @ 23,8 SAY "D"
  388. ENDIF
  389. @ 21,31 SAY "S"
  390. @ 22,31 SAY "R"
  391. @ 23,31 SAY "J"
  392. @ 21,56 SAY "F"
  393. @ 22,56 SAY "G"
  394. @ 23,56 SAY "?"
  395. @ 23,67 SAY "<Esc>"
  396. SET COLOR TO W+/B
  397. @ 21,10 SAY "= Read msgs."
  398. IF SubStr(l,10,1) = "U" 
  399.    @ 22,10 SAY "= Write/Upload msg." 
  400. ELSE
  401.    @ 22,10 SAY "= Write message" 
  402. ENDIF
  403. IF SubStr(l,9,1) = "D" 
  404.    @ 23,10 SAY "= Delete your msgs."
  405. ENDIF
  406. @ 21,33 SAY "= Scan msgs."
  407. @ 22,33 SAY "= Reset msgs. read"
  408. @ 23,33 SAY "= Join(add) topic"
  409. @ 21,58 SAY "= Find Msg. Board"
  410. @ 22,58 SAY "= Go to Msg. Board#"
  411. @ 23,58 SAY "= Help"
  412. @ 23,73 SAY "= Quit"
  413. RETURN
  414.  
  415. **************************************************
  416. PROCEDURE Lst
  417. PARAMETERS a
  418.  
  419. PRIVATE r
  420. r = 3
  421. IF a = 0
  422.    n = Int((pag-1)*17) + 1         
  423. ELSE
  424.    n = 1 + (a-1)*17
  425. ENDIF
  426.  
  427. SET COLOR TO N/N
  428. @ 2,0 CLEAR TO 20,79
  429. DO WHILE r <= 19                             
  430.          IF a = 0
  431.             SEEK msg[n]
  432.          ELSE
  433.             SEEK b[n]
  434.          ENDIF
  435.          SET COLOR TO GR+/N                      
  436.          @ r,1 SAY "["                           
  437.          @ r,2 SAY num PICTURE "@Z 999"
  438.          @ r,5 SAY "]"                           
  439.          SET COLOR TO W+/N
  440.          @ r,8 SAY title
  441.          SET COLOR TO GR+/N                      
  442.          @ r,26 SAY desc
  443.          SET COLOR TO W+/N
  444.          @ r,53 SAY srce
  445.          DO CASE
  446.             CASE flag = "O"
  447.                  SET COLOR TO G+/N
  448.                  @ r,63 SAY "Open      "
  449.             CASE flag = "F"
  450.                  SET COLOR TO R+/N
  451.                  @ r,63 SAY "Restricted"
  452.             CASE flag = "R"
  453.                  SET COLOR TO GR+/N
  454.                  @ r,63 SAY "Read Only "
  455.             CASE flag = "W"
  456.                  SET COLOR TO GR+/N
  457.                  @ r,63 SAY "Write Only "
  458.             CASE flag = "T"
  459.                  SET COLOR TO GR+/N
  460.                  @ r,63 SAY "Write-Restricted"
  461.          ENDCASE
  462.       IF a = 0 .AND. n = e
  463.          RETURN                                  
  464.       ENDIF
  465.       IF a # 0 
  466.          IF n = j
  467.             a = 0
  468.             RETURN
  469.          ENDIF
  470.       ENDIF
  471.       r = r + 1                            
  472.       n = n + 1
  473. ENDDO
  474. a = a + 1
  475. RETURN
  476.  
  477. **************************************************
  478. PROCEDURE Acc
  479.  
  480. SEEK msg[ms]
  481.      IF flag = "F"
  482.         IF fval # SubStr(f,fpos,Len(fval))
  483.            SET COLOR TO B/B
  484.            @ 7,31 CLEAR TO 11,48
  485.            SET COLOR TO W+/B
  486.            @ 8,33 SAY "Access Denied."
  487.            @ 10,35 SAY  "<ANY KEY>"
  488.            k = InKey(20)
  489.            DO Lst WITH 0
  490.            SET COLOR TO GR+/R
  491.            @ r,8 SAY msg[ms]
  492.            ok = .F.
  493.            RETURN
  494.         ENDIF
  495.      ENDIF
  496. SET COLOR TO W+/N
  497. @ 0,0 CLEAR
  498. RETURN
  499.  
  500. **************************************************
  501. PROCEDURE BFind
  502. PARAMETERS g
  503.  
  504. STORE Space(16) TO txt
  505. SET COLOR TO W+/B
  506. @ 8,25 CLEAR TO 10,54
  507. @ 9,27 SAY "Subject: "
  508. @ 9,36 GET txt 
  509. READ
  510. txt = RTrim(txt)
  511.  
  512. SET COLOR TO W+/N
  513. @ 0,0 CLEAR
  514.  
  515. GOTO TOP
  516. COUNT TO j FOR Upper(txt) $ Upper(title) .OR. Upper(txt) $ Upper(desc)
  517.  
  518. IF j = 0 
  519.    @ 2,1 SAY "No Message Board titles or descriptions contain"
  520.    @ 3,1 SAY "the specified text:"         
  521.    @ 3,22 SAY Chr(34) + txt + Chr(34)
  522.    k = InKey(40) 
  523.    g = 0
  524.    RETURN
  525. ENDIF
  526.  
  527. DECLARE b[j]
  528.  
  529. GOTO TOP
  530. j = 0
  531. x = 1
  532. DO WHILE .T.
  533.    IF Upper(txt) $ Upper(title) .OR. Upper(txt) $ Upper(desc)
  534.       j = j + 1
  535.       b[j] = title
  536.    ENDIF   
  537.    IF x = e
  538.       EXIT
  539.    ENDIF
  540.    x = x + 1
  541.    SKIP
  542. ENDDO
  543.  
  544. @ 1,8 SAY "Title             Description                Source    Access"
  545. @ 2,4 TO 2,75
  546. a = 1
  547. DO Lst WITH a
  548. DO WHILE a # 0
  549.    SET COLOR TO RB+/N
  550.    @ 21,5 SAY "< >             < >"
  551.    SET COLOR TO GR+/N
  552.    @ 21,6 SAY "C" 
  553.    @ 21,22 SAY "S"
  554.    SET COLOR TO BG+/N
  555.    @ 21,9 SAY "Continue"
  556.    @ 21,25 SAY "Stop Listing"
  557.    k = " "
  558.    @ 21,37 GET k
  559.    DO WHILE .T.
  560.       READ
  561.       DO CASE 
  562.          CASE LastKey() = 67 .OR. LastKey() = 99      && Continue
  563.               @ 3,0 CLEAR TO 23,79
  564.               DO Lst WITH a
  565.               EXIT
  566.          CASE LastKey() = 83 .OR. LastKey() = 115     && Stop
  567.               a = 0
  568.               EXIT
  569.       ENDCASE
  570.    ENDDO
  571. ENDDO
  572. g = 0
  573. SET COLOR TO W+/N
  574. @ 21,0 CLEAR TO 21,79
  575. @ 21,1 SAY "Select number to Go To, 0 for none >"
  576. @ 21,37 GET g PICTURE "@BZ 999"
  577. READ
  578. RETURN
  579.  
  580.